<?php

declare(strict_types=1);

namespace app\eslib;

use Firebase\JWT\JWT;
use Firebase\JWT\Key;

class EsJwtUtils
{

    public static function encodeJWT(array $data, string $key = 'FpwuzjkDI+17t5', string $algorithm = 'HS256'): string
    {
        // 载荷（存放有效信息的地方）
        $payload = [
            // iss: jwt签发者（网址或IP，例如：http://example.com）
            'iss' => 'http://example.org',
            // aud: 接收jwt的一方（网址或IP，例如：http://example.com）
            'aud' => 'http://example.org',
            // iat: jwt的签发时间
            'iat' => time(),
            // nbf: 定义在什么时间之前，该jwt都是不可用的.（例如：strtotime('10 hours')）
            'nbf' => strtotime('1 days'),
            // 携带数据
            'data' => $data,
        ];

        return JWT::encode($payload, $key, $algorithm);
    }
    public static function decodeJWT(string $jwt, $key = 'FpwuzjkDI+17t5', $algorithm = 'HS256'): array
    {
        JWT::$leeway = strtotime('1 days'); // 校正服务器时间（延迟8小时）
        try {
            $payload = JWT::decode($jwt, new Key($key, $algorithm));
            if ($payload->nbf < time()) {
                return EsUtils::stdmessage(0, 'Token 已过期');
            }
            return EsUtils::stdmessage(1, '', $payload->data);
        } catch (\Exception $ex) {
            return EsUtils::stdmessage(0, $ex->getMessage());
        }
    }
}
